import sys
import re

def count_characters(file_path):
    """统计字符数（中英文通用）：包括所有可见字符、空格、换行、标点（中文/英文）"""
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()
            # 直接返回所有字符的长度（utf-8编码下，汉字、字母、标点都算1个字符）
            return len(content)
    except FileNotFoundError:
        print(f"错误：找不到文件 '{file_path}'")
        sys.exit(1)

def count_words(file_path):
    """统计英文单词数：连续字母组成的序列（保持原逻辑）"""
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()
            words = re.findall(r'[a-zA-Z]+', content)
            return len(words)
    except FileNotFoundError:
        print(f"错误：找不到文件 '{file_path}'")
        sys.exit(1)

def count_sentences(file_path):
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()
            # 关键优化：标点后必须跟 空格(\s)、换行(\n) 或 文件结束($)，才算句子结尾
            # 同时用 \B 排除“标点在单词中间”的情况（比如缩写 U.S.A.）
            sentences = re.findall(r'[.!?。？！](?=\s|\n|$|\B)', content)
            return len(sentences)
    except FileNotFoundError:
        print(f"错误：找不到文件 '{file_path}'")
        sys.exit(1)

if __name__ == '__main__':
    if len(sys.argv) == 2:
        # 无参数模式：统计所有指标
        file_name = sys.argv[1]
        print(f"字符数：{count_characters(file_name)}")
        print(f"单词数（英文）：{count_words(file_name)}")
        print(f"句子数：{count_sentences(file_name)}")
    elif len(sys.argv) == 3:
        # 带参数模式：统计单个指标
        param, file_name = sys.argv[1], sys.argv[2]
        if param == '-c':
            print(f"字符数：{count_characters(file_name)}")
        elif param == '-w':
            print(f"单词数（英文）：{count_words(file_name)}")
        elif param == '-s':
            print(f"句子数：{count_sentences(file_name)}")
        else:
            print("无效参数！使用 -c（字符）、-w（英文单词）、-s（句子）")
            sys.exit(1)
    else:
        print("用法：")
        print("  1. 统计所有：python wc.py 文件名")
        print("  2. 统计单个：python wc.py [-c|-w|-s] 文件名")
        sys.exit(1)